Virtualized computing systems are becoming more prevalent in today's computing environment. In a virtualized system, a hypervisor and/or a host operating system (OS) allow multiple instances of an operating system to execute on shared hardware. Each instance of an operating system is referred to as a guest operating system. Each guest operating system, from its own perspective, behaves as if it has full control over the physical hardware. The hypervisor and/or host OS is responsible for ensuring that the guest operating system's use of the hardware does not interfere with one another.
In a fully virtualized environment, all guest operating system Input/Output (IO) activity is emulated. For example, when a guest operating system interacts with an IO device, such as a Peripheral Component Interconnect (PCI) card that enables network or storage access, the hypervisor and/or host OS may emulate the device. A driver in the guest operating system that would normally interact with the physical PCI card would actually be interacting with the hypervisor and/or host OS. The hypervisor and/or host OS would pass the requests to the physical PCI card, taking into account that other guest operating systems may be using the same PCI card.
In non-fully virtualized systems, IO functionality may be directly handled by the guest operating system itself. For example, a PCI card may be directly assigned to a guest operating system, which is responsible for initialization and utilization of the functions of the card, thus bypassing the hypervisor and/or host OS. In some cases, the functions of a PCI card may be divided between guest operating systems. For example, in a PCI express IO virtualization (PCIe IOV) environment, virtual functions of a PCI card may be directly assigned to a guest operating system. In such environments, the guest operating system, through an appropriate driver, communicates directly with one or more functions provided by the PCI card. In such environments, the interaction with the hypervisor and/or host OS for IO activities is reduced.